import { request } from "./index"
import type { CreatorModel } from "./user"

//* ----------------根据歌单id获取歌单基础信息----------------------

export interface TracksModel {
  like: boolean //! 自己加的字段，用来标识用户是否已点喜欢
  name: string //曲目名
  id: number //曲目id
  fee: number // 1表示vip标识

  arsText: string //!自己加的字段，预先处理歌手列表拼接字符串渲染
  //ar歌手列表，如果是个人云盘上传的私有track，则这里id会为0 name会为null，需要取pc字段找数据
  ar: {
    id: number
    name: string | null
  }[]

  //al专辑信息，只需要专辑名就够了，如果是个人云盘上传的私有track，这里name会是null，需要取pc字段
  al: {
    name: string
  }

  //个人云上传的私有track才会有的字段
  pc?: {
    cid: string //私有track的id
    alb: string //专辑名,可能为空串
    ar: string //歌手名
  }

  private: boolean //! 自己加的字段，表示该track是否为个人云私有track

  privileges: PrivilegeModel //! 把原本privileges对应的东西拿到这里来方便渲染
}

export interface PlaylistDetailModel {
  id: number
  name: string //歌单名字
  coverImgUrl: string //歌单封面url 有logo 备用
  backgroundCoverUrl: string //歌单封面url 无logo 但可能无值
  description: string //歌单描述
  creator: CreatorModel

  subscribedCount: number //收藏数
  subscribed: boolean //是否已经收藏歌单，如果是自己创建的歌单是固定false，收藏状态无法改变的
  commentCount: number //评论数
  shareCount: number //分享数
  formatSubscribed: string //!自己加的字段，格式化大数值
  formatComment: string //!自己加的字段，格式化大数值
  formatShare: string //!自己加的字段，格式化大数值

  //以tracks的length作为数量显示，因为歌单最多只能请求20条，明明登录了也有限制
  tracks: TracksModel[]
}

interface PrivilegeModel {
  maxbr: number //播放最大比特率，大于320000表示有SQ品质标识 也就是999000。还有downloadMaxbr表示下载
  fee: number //和track里面的fee一样，值为1表示vip标识
  subp: 1 | 0 //1表示完成，0表示是试听标识
}

type reqPlayListDetailResModel = {
  code: number
  playlist: PlaylistDetailModel
  privileges: PrivilegeModel[]
}

export const reqPlayListDetail = (playlistId: number) =>
  request<reqPlayListDetailResModel>({
    url: "/playlist/detail",
    params: { id: playlistId },
  })

//* ---------------获取日推歌曲------------------------

interface DailySongModel {
  name: string //歌名
  id: number //歌id
  artists: {
    //歌手列表
    name: string
  }[]
  album: {
    name: string //专辑名
    id: number
    blurPicUrl: string //专辑封面
  }
}

export const reqDailySongs = () =>
  request<{ recommend: DailySongModel[] }>({
    url: "/recommend/songs",
  })



//* ------------------收藏/取消订阅歌单----------------------

//! 放弃使用，接口返回"违法的请求"
//t: 1是收藏 2取消收藏  id: 歌单 id
export const reqSubscribe = (id: number, t: 1 | 2) =>
  request<null>({
    url: "/playlist/subscribe",
    params: { t, id },
  })
